#include <stdio.h>
#include <stdlib.h>
#include "kpoint.h"

bool kpoints::input()
{
    FILE *in=fopen("EIGENVAL","r");
    if(!in){
        perror("EIGENVAL");
        return false;
    }
    
    char  s[100];
    fgets(s,100,in);
    sscanf(s,"%*d%*d%*d%d",&num_s);
    for(uint i=0;i<5;i++) fgets(s,100,in);
    sscanf(s,"%*d%d%d",&num_k,&num_b);
    //printf("%d\n",BandNum);
    if(!fgets(s,100,in)) {
        fclose(in);
        return false;
    }
    
    //printf("%s",s);
    m_data=new data[num_k*num_b*num_s];
    points=new point<data>[num_k];
    if(num_s==1){
        for(uint i=0;i<num_k;i++){
            fgets(s,100,in);
            sscanf(s,"%f%f%f",&(*this)[i][0],&(*this)[i][1],&(*this)[i][2]);
            for(uint j=0;j<num_b;j++){
                fgets(s,100,in);
                sscanf(s,"%*d%f",&(*this)(i,j,0));
            }
            fgets(s,100,in);
        }
    }else{
        for(uint i=0;i<num_k;i++){
            fgets(s,100,in);
            sscanf(s,"%f%f%f",&(*this)[i][0],&(*this)[i][1],&(*this)[i][2]);
            for(uint j=0;j<num_b;j++){
                fgets(s,100,in);
                sscanf(s,"%*d%f%f",&(*this)(i,j,0),&(*this)(i,j,1));
            }
            fgets(s,100,in);
        }
    }
    fclose(in);
    return true;
}

void kpoints::set_Efermi()
{
    printf("E-fermi= %f eV\n",Efermi);
    for(uint i=0;i<num_k*num_b*num_s;i++){
        m_data[i]-=Efermi;
    }
}


